import vnode from './vnode'
import createElem from './createElem'
import patchVnode from './patchVnode'

import judge from './judge'

export default function (oldVnode, newVnode) {
  // 1、判断第一个节点是不是虚拟节点
  if (oldVnode.sel == '' || oldVnode.sel == undefined) {
    // DOM节点包装成 vNode 节点
    //console.log('不是虚拟节点');
    oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], undefined, oldVnode)
  }

  // 2、判断oldVnode和newVnode是不是同一个节点
  // 
  //
  // 课程结束，我来实现 data，这里如果是同一个节点，可能还需要更新 class，props等
  if (judge.sameVnode(oldVnode, newVnode)) {
    // console.log('是同一个节点')
    patchVnode(oldVnode, newVnode)
  } else {
    // 不是同一个节点，在这个节点前插入，然后删除这个节点
    // console.log(oldVnode.elm)
    if (oldVnode.elm.parentNode) {
      const domnode = createElem(newVnode)
      oldVnode.elm.parentNode.insertBefore(domnode, oldVnode.elm)
      oldVnode.elm.parentNode.removeChild(oldVnode.elm)
    }
  }
}
